offsetof関数は、構造体メンバーの位置(構造体の先頭からのオフセット)を取得します。
#include <stddef.h>
size_t offsetof(type, member);
typetは対象となる構造体を指定します。
memberは対象となるメンバーを指定します。
戻り値として、構造体の先頭からのオフセットをバイト単位で返します。
プログラム 例
#include <stdio.h>
#include <stddef.h>
/* メンバー構造体 */
struct member {
int number; /* 番号 */
char name[15]; /* 名前 */
short age; /* 年齢 */
char sex; /* 性別 */
double height; /* 身長 */
float weight; /* 体重 */
};
int main()
{
printf('member構造体の大きさ : %d\n', sizeof(struct member));
printf('number (int) : %d\n', offsetof(struct member, number));
printf('name (char [15]) : %d\n', offsetof(struct member, name));
printf('age (short) : %d\n', offsetof(struct member, age));
printf('sex (char) : %d\n', offsetof(struct member, sex));
printf('height (double) : %d\n', offsetof(struct member, height));
printf('weight (float) : %d\n', offsetof(struct member, weight));
return 0;
}
例の実行結果
$ ./offsetof.exe member構造体の大きさ : 36 number (int) : 0 name (char [15]) : 4 age (short) : 20 sex (char) : 22 height (double) : 24 weight (float) : 32 $